home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ABUSESRC.ZIP / AbuseSrc / imlib / status.c < prev    next >
C/C++ Source or Header  |  1996-04-24  |  1KB  |  71 lines

  1. #include "macs.hpp"
  2. #include "status.hpp"
  3. #include "dprint.hpp"
  4.  
  5. status_manager *stat_man=NULL;
  6.  
  7. class text_status_node
  8. {
  9.   public :  
  10.   char *name;
  11.   text_status_node *next;
  12.   visual_object *show;
  13.   int last_update;
  14.   text_status_node(char *Name, visual_object *Show, text_status_node *Next) 
  15.   { name=strcpy((char *)jmalloc(strlen(Name)+1,"status name"),Name); 
  16.     show=Show;
  17.     next=Next; 
  18.     last_update=0;
  19.   }
  20.   ~text_status_node() { jfree(name); if (show) delete show; }
  21. } ; 
  22.  
  23.  
  24.  
  25. text_status_manager::text_status_manager()
  26.   first=NULL; 
  27.   level=0; 
  28. }
  29.  
  30. void text_status_manager::push(char *name, visual_object *show)
  31. {
  32.   level++;
  33.   first=new text_status_node(name,show,first);  
  34. }
  35.  
  36. void text_status_manager::update(int percentage)
  37. {
  38. //    return;
  39.   if (level==1 && percentage-first->last_update>4)
  40.   {
  41.       char s[256], len;
  42.     first->last_update=percentage;
  43.     sprintf(s,"\r%s [",first->name);
  44.     len = strlen(s);
  45.     int t=percentage*40/100;
  46.     int i=0;
  47.     for (;i<t;i++)
  48.       s[len+i] = '.';
  49.     for (;i<40;i++)
  50.         s[len+i] = ' ';
  51.     s[len+i++] = ']';
  52.     s[len+i] = 0;
  53.     dprintf("%s",s);
  54.   }
  55. }
  56.  
  57. void text_status_manager::pop()
  58. {  
  59.   CONDITION(first,"No status's to pop!");
  60.   if (level==1) dprintf("\n");
  61.   level--;
  62.   text_status_node *p=first; first=first->next;
  63.   delete p;
  64. }
  65.  
  66.  
  67.  
  68.  
  69.  
  70.